package com.yeyks.service;

import com.yeyks.dal.domain.CouponInfo;
import com.yeyks.dal.domain.UserCouponInfo;
import com.yeyks.dal.domain.UserInfo;
import com.yeyks.dto.UserCouponInfoDTO;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Map;

/**
 * @Author fuchangshuai
 * @date 2019/2/28 10:02 AM
 */
public interface UserCouponService {

    /**
     * 根据一定条件查询当前用户的优惠券
     *
     * @param id
     * @param useStatus 是否已经使用, 默认1未使用，2已使用，3已过期
     * @param price 满减价格
     * @param pageNum
     * @param pageSize
     * @return
     */
    Map<String, Object> selectUserCouponList(Integer id, Integer useStatus, Integer price, Integer pageNum, Integer pageSize);

    /**
     * 给用户发放两张新人红包券
     *
     * @param id
     */
    @Transactional
    Boolean createNewCoupon(Integer id);

    /**
     * 修改券为已经使用条件
     * @param couponId
     * @return
     */
    Integer updateUsed(Integer couponId);

    /**
     * 通过userCouponId修改优惠券的使用状态
     *
     * @param userCouponId
     * @param use
     * @return
     */
    Integer updateCouponUseById(Integer userCouponId, Boolean use);

    /**
     * 通过券id和用户id查询该用户未使用的券
     *
     * @param couponId
     * @param id
     * @return
     */
    UserCouponInfo selectUserCoupon(Integer couponId, Integer id);

    /**
     * 通过主键id查询用户券对象
     *
     * @param id
     * @return
     */
    UserCouponInfo selectUserCouponById(Integer id);

    /**
     * 通过count，减少券的剩余数，并增加券的领取数
     *
     * @param count 领取的数量
     * @param couponInfo
     * @return
     */
    Integer updateCount(Integer count, CouponInfo couponInfo);

    /**
     * 用户领取券
     *
     * @param userId
     * @param couponId
     * @return
     */
    Boolean userGetCoupon(Integer userId, Integer couponId);

    /**
     * 用戶領取推广券
     *
     * @param userId
     * @param couponValue
     * @return
     */
    Boolean getRecommendCoupon(Integer userId, Integer couponValue);

    /**
     * 用户领取鱼丸兑换券
     *
     * @param userId
     * @param couponId
     * @return
     */
    Boolean userGetFishBallCoupon(Integer userId, Integer couponId);

    /**
     * 获取推广充值获取的优惠券
     *
     * @param userInfo
     * @return
     */
    UserCouponInfoDTO selectNewCoupon(UserInfo userInfo);
}
